package com.itlong.cloud.property.dao;


import com.itlong.cloud.POJO.PO.*;
import com.itlong.cloud.POJO.VO.property.BluetoothCallVO;
import com.itlong.cloud.POJO.VO.property.PropertyEquipGetVO;
import com.itlong.cloud.POJO.VO.property.PropertyPadFaceEquipVO;
import com.itlong.cloud.POJO.VO.smartcard.SmartCardFloorInfoVO;
import com.itlong.cloud.POJO.VO.smartcard.SmartCardOldDeviceInfoVO;
import com.itlong.cloud.POJO.VO.smartcard.SmartCardServerFloorRelationVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *     电梯信息持久层对象
 * </desc>
 *
 * @createDate 2017/9/21
 */
@Mapper
@Repository
public interface IPropertyElevatorDao extends IAbstractBaseDao<DeviceElevatorInfoPO> {

    /**
     * <desc>
     *      添加电梯
     * <desc/>
     * @param   params  bean转换层map后的参数集
     * @return  添加数量
     * @author Biao.R
     * @createDate 2017/9/21
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      查找云电梯产品型号信息
     * <desc/>
     * @param   typeId  云电梯类型
     * @return
     * @author Juguang.S
     * @createDate 2018/4/16
     */
    ProductTypePO getTypeId(Integer typeId);

    /**
     * <desc>
     *      更新
     * <desc/>
     * @param   params  bean转换层map后的参数集
     * @return  更新数量
     * @author Biao.R
     * @createDate 2017/9/26
     */
    Integer update(Map<String, Object> params);

    /**
     * <desc>
     *      更新
     * <desc/>
     * @param   params  bean转换层map后的参数集
     * @return  更新数量
     * @author Biao.R
     * @createDate 2017/9/26
     */
    Integer updateForElevator(Map<String, Object> params);

    /**
     * <desc>
     *       获取电梯分页数据集
     * <desc/>
     * @param   params  查询参数
     * @return 分页数据集
     * @author Biao.R
     * @createDate 2017/9/25
     */
    List<PropertyEquipGetVO> getPageList(Map<String, Object> params);


    /**
     * <desc>
     *      获取分页总数量
     * <desc/>
     * @param   params  查询参数
     * @return 分页总数量
     * @author Biao.R
     * @createDate 2017/9/25
     */
    Integer getPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      根据设备唯一码查询单个电梯
     * <desc/>
     * @param   deviceUnique    设备唯一码
     * @return      PropertyEquipGetVO    设备返回对象
     * @author Biao.R
     * @createDate 2017/9/27
     */
    DeviceElevatorInfoPO getByDeviceUnique(String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一码删除已有设备数据
     * <desc/>
     * @param   deviceUnique   设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2019/11/4
     */
    void deleteByDeviceUnique(String deviceUnique);


    /**
     * <desc>
     *      获取分页数据集
     * <desc/>
     * @param   params  查询参数
     * @return 分页数据集
     * @author Biao.R
     * @createDate 2017/9/25
     */
    List<PropertyEquipGetVO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取分页总数量
     * <desc/>
     * @param   params  查询参数
     * @return 分页总数量
     * @author Biao.R
     * @createDate 2017/10/9
     */
    Integer getCount(Map<String, Object> params);

    /**
     * <desc>
     *      根据相关参数查询设备
     * <desc/>
     * @param   params  查询参数
     * @return    List<PropertyEquipGetVO>  查询出的设备集合
     * @author Biao.R
     * @createDate 2017/10/11
     */
    List<PropertyEquipGetVO> getEquipList(Map<String, Object> params);

    /**
     * <desc>
     *      获取某项目中的设备唯一码列表
     * <desc/>
     *
     * @param projectId 项目编号
     * @return
     * @author Chunjian.G
     * @createDate 2017-12-15
     */
    List<String> getDeviceUniquesByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      批量添加电梯设备信息
     * <desc/>
     *
     * @param elevatorInfoPOS
     * @return
     * @author Chunjian.G
     * @createDate 2017-12-15
     */
    Integer saveBatch(List<DeviceElevatorInfoPO> elevatorInfoPOS);

    /**
     * <desc>
     *      批量更新设备
     * <desc/>
     * @param  batchUpdateList  待更新的设备信息数据集
     * @author Biao.R
     * @createDate 2018/2/25
     */
    void batchUpdateEquip(List<Map<String,Object>> batchUpdateList);

    /**
     * <desc>
     *     获取人脸识别云电梯分页数据集
     * </desc>
     *
     * @param params 查询参数
     * @return 分页数据集
     * @author wangzhi
     * @createDate 2018/05/11
     */
    List<PropertyPadFaceEquipVO> getFaceCloudElevator(Map<String,Object> params);

    /**
     * <desc>
     *     获取人脸识别云电梯分页数据集总数
     * </desc>
     *
     * @param params 查询参数
     * @return 总数据数量
     * @author wangzhi
     * @createDate 2018/05/11
     */
    Integer getFaceCloudElevatorCount(Map<String, Object> params);

    /**
     * <desc>
     *      根据设备机号查询拥有该设备临时权限的所有物业用户
     * </desc>
     *
     * @param deviceId 设备机号
     * @param projectId  项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2018/07/12
     */
    List<DeviceElevatorAuthPO> getUserAuthsByDeviceId(@Param("deviceId")Integer deviceId,
                                                      @Param("projectId")String projectId);

    /**
     * <desc>
     *      根据项目编号修改项目下设备的配置人脸识别的状态
     * </desc>
     *
     * @param projectId 设备编号
     * @return
     * @author JuGuang.S
     * @createDate 2018-07-03
     */
    void updateEquipFaceStatus(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据项目编号获取云电梯信息
     * </desc>
     *
     * @param  projectId 项目Id
     * @return 云电梯信息
     * @author Qiang.S
     * @createDate 2019-01-26
     */
    List<SmartCardOldDeviceInfoVO> getCloudElevatorList(String projectId);

    /**
     * <desc>
     *     获取云电梯楼层映射表信息
     * <desc/>
     *
     * @param deviceUnique 设备唯一编号
     * @return
     * @author Qiang.S
     * @createDate 2019-01-26
     */
    SmartCardFloorInfoVO getElevatorFloorConfig(String deviceUnique);

    /**
     * <desc>
     *      根据natural查询电梯的最大最小楼层范围
     * </desc>
     *
     * @param deviceUnique
     * @param minNaturalFloor
     * @param maxNaturalFloor
     * @return
     * @author Jiaqi.X
     * @createDate 2019/03/27
     */
    Map<String,Object> getFloorNumByNaturalFloorAndDeviceUnique(@Param("deviceUnique") String deviceUnique,
                                                                @Param("minNaturalFloor") Integer minNaturalFloor,
                                                                @Param("maxNaturalFloor") Integer maxNaturalFloor);

    /**
     * <desc>
     *      通过设备序列号查询楼层对应表
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/03/29
     */
    List<SmartCardServerFloorRelationVO> getSmartCardServerFloorRelation(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      设置云端同步的楼层对应表数据为已同步
     * </desc>
     *
     * @param tableName
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/04/01
     */
    Integer setFloorRelationSyncSerialNo(@Param("tableName") String tableName,@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      检测电梯是否存在
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @authro Jiaqi.X
     * @createDate 2019/11/11
     */
    Integer checkSmartCardElevatorIsOnline(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取蓝牙外呼设备绑定关系
     * </desc>
     *
     * @param deviceUniqeu
     * @return
     * @author Jiaqi.X
     * @createDate 2020/04/15
     */
    List<BluetoothCallVO> getBluetoothRelation(@Param("deviceUnique") String deviceUniqeu);

    /**
     * <desc>
     *      获取电梯列表
     * </desc>
     *
     * @param params
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/14
     */
    List<PropertyEquipGetVO> getControllerPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取电梯数量
     * </desc>
     *
     * @param params 查询参数
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/28
     */
    Integer getControllerPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      根据告警ID获取电梯唯一编码
     * </desc>
     *
     * @param alarmId 告警id
     * @return
     * @author Juguang.S
     * @createDate 2021/05/31
     */
    String getElevatorDeviceUniqueByAralmId(@Param("alarmId") String alarmId);

    /**
     * <desc>
     *      根据userId查询用户相关信息
     * </desc>
     *
     * @param userId 用户d
     * @return
     * @author Juguang.S
     * @createDate 2021/06/01
     */
    PropertyUserInfoPO getUserInfoByUserId(@Param("userId") String userId);

    /**
     * <desc>
     *      批量保存操作日志数据
     * </desc>
     *
     * @return 0 失败，1 成功
     * @author Juguang.S
     * @createDate 2021/06/01
     */
    Integer batchSaveOperationLogData(List<OperationSpecialLogPO> operationSpecialLogPOList);
}
